
#include "httplib.h"

void Hello(const httplib::Request &req, httplib::Response &rsp)
{
    rsp.set_content("Hello world!", "text/plain");//text/plain：正文类型，是一个文本数据
    rsp.status = 200;
}

void Numbers(const httplib::Request &req, httplib::Response &rsp)
{
    auto num = req.matches[1]; // 0里边保存的是整体path，往后下标中保存的是捕捉的数据
    rsp.set_content(num, "text/plain");
    rsp.status = 200;
}

void Multipart(const httplib::Request &req, httplib::Response &rsp)//req：请求数据  rsp：响应数据
{
    auto ret = req.has_file("file");//判断有没有这个文件上传，有的话，就获取这个文件信息
    if (ret == false)
    {
        std::cout << "not file upload\n";
        rsp.status = 404;
        return;
    }
    const auto &file = req.get_file_value("file");//获取这个文件信息
    rsp.body.clear();
    rsp.body = file.filename; // 文件名称
    rsp.body += "\n";
    rsp.body += file.content; // 文件内容
    rsp.set_header("Content-Type", "text/plain");//设置头部信息
    rsp.status = 200;
    return;
}

int main()
{
    httplib::Server server; // 实例化以Server类的对象用于搭建服务器

    server.Get("/hi", Hello); // 注册一个针对/hi的Get请求的处理函数映射关系  /hi
    server.Get(R"(/numbers/(\d+))", Numbers);//R：去除字符串中的转义字符的含义  捕获一个数字：/numbers/456：捕获一个456的数字
    server.Post("/multipart", Multipart);//文件上传函数
    server.listen("0.0.0.0", 9090);//启动服务器
    return 0;
}